- 1.背诵作用域的概念
- 2. 练习作用域之间的转换
- 3.默写一个装饰器, 用来输出函数的执行时间.
- 4.使用装饰器来为斐波那契函数添加缓存

def cache_deco(func):
# 保存n执行后的结果
a = {}
# 判断当前cache a中是否有结果, 有的话就直接返回, 没有就执行以下
result = func(n)
return result

@cache_deco
def fibo(n):
pass



# 1.背诵作用域的概念
# 程序创建、访问、改变一个变量的时候，
# 都是在一个保存该变量的空间内进行，
# 整个空间被称为命名空间，即作用域

#2. 练习作用域之间的转换
a = 1


def foo():
    a = 2
    print(a)


print('输出foo函数中a = 2', foo())
print('输出最上面的a=1:', a)

# 全局变量global
b = 1


def foo():
    global b
    b = 2
    print(b)


print("下面将打印全局变量b=2：")
foo()
print('右边打印foo函数里面的全局变量b:', b)

# 局部变量
a = 1
b = []


def foo():
    a = 2
    b.append(2)
    return None


foo()
print('打印a值1：', a)
print('打印b列表：', b)

# 3.默写一个装饰器, 用来输出函数的执行时间.


def clock_it_deco(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"{func.__name__} 执行时间: {format(end_time - start_time, '.2f')} s")
        return result
    return wrapper


# @clock_it_deco
def fib(n):
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)


print(fib(15))

# 装饰器计时
a = 1


@clock_it_deco
def foo():
    a = 2
    print(a)


print('输出foo函数中a = 2', foo())
print('输出最上面的a=1:', a)


# 4.使用装饰器来为斐波那契函数添加缓存


def cache_deco(func):

    a = {}

    def wrapper(n):
        if n in a:
            return a[n]
        else:
            result = func(n)
            return result
    return wrapper

@cache_deco
def fib(n):
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)


print(fib(20))